import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import "normalize.css"; // 重置样式表
import "@/assets/styles/common.scss";
import "@/assets/styles/moduls.scss";
// 挂载公共的工具函数
import utils from "./utils/index";
Vue.prototype.$utils = utils;
// 挂载全局工具函数方法
import toolUtils from "./utils/utils.js";
Vue.prototype.$toolUtils = toolUtils;
// 挂载全局服务器图片路径
Vue.prototype.$serverImgUrl =
  "https://lingxin1314.oss-cn-beijing.aliyuncs.com/weixiaozhu/";
// 挂载全局图片路径配置
import imagePath from "./utils/imagePath.js";
Vue.prototype.$imagePath = imagePath;
// 全局挂载二维码生成组件
// 引入二维码生成组件
import QrcodeGenerator from "@/components/public/QrcodeGenerrator.vue";
Vue.component("QrcodeGenerator", QrcodeGenerator);
// 挂载全局的api
import api from "./api/index.js";
Vue.prototype.$api = api;
import VueClipBoard from "vue-clipboard2";
Vue.use(VueClipBoard);
import WujieVue from "wujie-vue2";
const { bus } = WujieVue;
Vue.prototype.$wujieBus = bus;
Vue.use(WujieVue);
/* 引入Vant */
import Vant from 'vant'
import 'vant/lib/index.css'
// 引入全局css变量
import './assets/css/variables.css'
Vue.use(Vant) 
// 引入富文本编辑器
import VueQuillEditor from "vue-quill-editor";
// 引入富文本编辑器的样式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

// 全局注册富文本编辑器
Vue.use(VueQuillEditor, {
  // 可以在这里配置一些默认参数（可选）
  // 例如：toolbar: [['bold', 'italic', ['link', 'image']]]
})
// 挂载全局默认数据配置
import defaultData from './utils/defaultData.js'
Vue.prototype.$defaultData = defaultData
// 注册全局过滤器/时间戳转换日期
import globalFilter from '@/utils/filter'

Object.keys(globalFilter).forEach((key) => {
  Vue.filter(key, globalFilter[key])
})

// 引入全局混入
import clickHandlerMixin from './mixins/clickHandlerMixin';
Vue.mixin(clickHandlerMixin);

// 组件自动化全局注册
const requireComponent = require.context(
  // 其组件目录的相对路径
  "./components/components/",
  // 是否查询其子目录
  true,
  // 匹配基础组件文件名的正则表达式
  /\.vue$/
);
requireComponent.keys().forEach(fileName => {
  // 获取组件配置
  const componentConfig = requireComponent(fileName)
  // 获取组件的默认导出
  const componentDefault = componentConfig.default
  
  // 生成组件名称：优先使用组件中定义的name属性，如果没有则从文件名中提取
  let componentName = ''
  if (componentDefault && componentDefault.name) {
    componentName = componentDefault.name
  } else {
    // 从文件名中提取组件名，移除路径和文件扩展名
    // 例如: './components/uploadCommodity/index.vue' -> 'uploadCommodity'
    componentName = fileName
      .replace(/^\.\/|\.vue$/g, '')
      .replace(/\/index$/, '')
      .replace(/\//g, '-')
      .split('-')
      .map(word => word.charAt(0).toUpperCase() + word.slice(1))
      .join('')
  }

  console.log("获取组件的配置",componentName, componentDefault);

  
  // 全局注册组件
  Vue.component(
    componentName, 
    componentDefault
  )
})
// import { ChromePicker } from "vue-color";
// Vue.component('chrome-picker', ChromePicker)
// 引用第三方iconfont图标库
import "@/assets/icon/iconfont/iconfont.css";
import qs from "qs";
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
Vue.config.productionTip = false;

Vue.use(ElementUI);
Vue.prototype.$message = ElementUI.Message;
Vue.prototype.$qs = qs;
new Vue({
  el: "#app",
  router,
  store,
  components: { App },
  template: "<App/>",
  created() {
    // 应用启动时恢复登录状态
    this.$store.dispatch('user/restoreLoginState');
  }
});
